// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
//     http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
//
// Author: wsfuyibing <682805@qq.com>
// Date: 2024-08-16

package conf

import "gitee.com/go-libs/db-xorm/db/commands/base"

// Mapping
// is a field type mapping to convertor.
type Mapping map[string]*base.Convertor

// Add
// adds a convertor for name into mapping.
func (o Mapping) Add(name string, convertor *base.Convertor) {
	o[name] = convertor
}

// Get
// gets a convertor with given name from mapping.
func (o Mapping) Get(name string) *base.Convertor {
	if convertor, ok := o[name]; ok {
		return convertor
	}
	return nil
}

// +---------------------------------------------------------------------------+
// | Hook methods                                                              |
// +---------------------------------------------------------------------------+

func (o Mapping) builtin() Mapping {
	for name, convertor := range map[string]*base.Convertor{
		// Int
		"tinyint":   {Type: "int"},
		"smallint":  {Type: "int"},
		"mediumint": {Type: "int"},
		"int":       {Type: "int"},
		"integer":   {Type: "int"},
		"bigint":    {Type: "int64"},

		// Float64
		"decimal": {Type: "float64"},
		"double":  {Type: "float64"},
		"float":   {Type: "float64"},

		// String
		"char":     {Type: "string"},
		"varchar":  {Type: "string"},
		"text":     {Type: "string"},
		"longtext": {Type: "string"},
		"enum":     {Type: "string"},

		// Blob.
		"blob": {Type: "[]byte"},

		// Date & time
		"date":     {Pkg: "gitee.com/go-libs/db-xorm/db", Type: "db.Date"},
		"datetime": {Pkg: "gitee.com/go-libs/db-xorm/db", Type: "db.Datetime"},
	} {
		o.Add(name, convertor)
	}
	return o
}
